home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / PROLOG / HUMBOLT / HUMBOLTS / _files / _humboltsr / MEMORY._c < prev    next >
Text File  |  1990-12-08  |  6KB  |  206 lines

  1. /***************************************************
  2. ****************************************************
  3. **                                                **
  4. **  HU-Prolog     Portable Interpreter System     **
  5. **                                                **
  6. **  Release 1.62   January  1990                  **
  7. **                                                **
  8. **  Authors:      C.Horn, M.Dziadzka, M.Horn      **
  9. **                                                **
  10. **  (C) 1989      Humboldt-University             **
  11. **                Department of Mathematics       **
  12. **                GDR 1086 Berlin, P.O.Box 1297   **
  13. **                                                **
  14. ****************************************************
  15. ***************************************************/
  16.  
  17. #include <stdlib.h>
  18. #include <stdio.h>
  19. #include "systems.h"
  20. #include "manager.h"
  21. #include "types.h"
  22.  
  23. #if BYTEOFFSET | WORDOFFSET
  24.  
  25. /* TERMENTRY TERMTAB[MAX_TERMS]; */
  26. fardeclare(ATOM,tNAME,MAX_TERMS);
  27. fardeclare(card,tNODECASE,MAX_TERMS);
  28.  
  29. /* ATOMENTRY ATOMTAB[MAX_ATOMS]; */
  30. fardeclare(STRING,a_IDENT,MAX_ATOMS);
  31. fardeclare(ATOM,a_NEXTATOM,MAX_ATOMS);
  32. fardeclare(ATOM,a_CHAINATOM,MAX_ATOMS);
  33. declare(CLAUSE,a_CLAUSE,MAX_ATOMS);
  34. declare(ARITY_TYPE,a_ARITY,MAX_ATOMS);
  35. fardeclare(PREC_TYPE,a_PREC,MAX_ATOMS);
  36. fardeclare(INFO_TYPE,a_INFO,MAX_ATOMS);
  37. #if HACKY
  38. fardeclare(card,a_NROFCALLS,MAX_ATOMS);
  39. #endif
  40.  
  41. /* TRAILENTRY TRAILTAB[MAX_TRAILER] */
  42. fardeclare(TERM,TRAILTAB,MAX_TRAILER);
  43.  
  44. /* ENVENTRY ENVTAB[MAX_ENVS]; */
  45. declare(TERM,e_FCALL,MAX_ENVS);
  46. declare(TERM,e_FBASE,MAX_ENVS);
  47. declare(ENV,e_FENV,MAX_ENVS);
  48. declare(ENV,e_FCHOICE,MAX_ENVS);
  49. fardeclare(ATOM,e_FATOM,MAX_ENVS);
  50. fardeclare(CLAUSE,e_FCLAUSE,MAX_ENVS);
  51. fardeclare(TRAIL,e_FTRAIL,MAX_ENVS);
  52. fardeclare(card,e_FKIND,MAX_ENVS);
  53.  
  54. /* char STRINGTAB[MAX_STRINGS]; */
  55. fardeclare(char,STRINGTAB,MAX_STRINGS);
  56.  
  57. #endif
  58.  
  59. #if POINTEROFFSET
  60.  
  61. #ifdef DYNMEM
  62.  
  63. int MAX_ATOMS = DEF_ATOMS;
  64. int MAX_TERMS = DEF_TERMS;
  65. int MAX_TRAILER = DEF_TRAILER;
  66. int MAX_ENVS = DEF_ENVS;
  67. int MAX_STRINGS = DEF_STRINGS;
  68.  
  69. TERMNODE *TERMAREA;
  70.  
  71. /* ATOMENTRY ATOMTAB[MAX_ATOMS]; */
  72. ARITY_TYPE *a_ARITY;
  73. STRING *a_IDENT;
  74. ATOM *a_NEXTATOM;
  75. ATOM *a_CHAINATOM;
  76. CLAUSE *a_CLAUSE;
  77. PREC_TYPE *a_PREC;
  78. INFO_TYPE *a_INFO;
  79. #if HACKY
  80. card *a_NROFCALLS;
  81. #endif
  82.  
  83. TERM *TRAILTAB;
  84.  
  85. TERM *e_FCALL;
  86. TERM *e_FBASE;
  87. ENV *e_FENV;
  88. ENV *e_FCHOICE;
  89. ATOM *e_FATOM;
  90. CLAUSE *e_FCLAUSE;
  91. TRAIL *e_FTRAIL;
  92.  
  93. char *STRINGTAB;
  94.  
  95. extern TRAIL TRAILEND;
  96. extern TRAIL BASETRAIL;
  97. extern TRAIL ENDTRAILER;
  98. extern TERM BASETERM;
  99. extern TERM GLOTOP;       
  100. extern TERM HEAPTOP;
  101. extern TERM LASTTERM;
  102. extern TERM tempterm;  /* for phy_name */
  103. extern CLAUSE clausechain;   /* used for retract */
  104. extern ATOM ATOMSTOP;
  105. extern STRING STRINGSTOP;
  106.  
  107.  
  108. /* ACK! BARF!  It is *CRITICAL* that calloc is used here.   The code expects a lot of */
  109. /* the tables to be initialized to 0 (as a synonym for NULL - v.portable :-(   )      */
  110.  
  111. #define ini_calloc(typ, num, msg) \
  112.         ( (typ *) safe_calloc( num, sizeof( typ ), msg ) )
  113.  
  114. static void *safe_calloc( int num, size_t size, char *msg )
  115. {
  116. void *memptr = calloc( num, size );
  117.       if( memptr == NULL ) {
  118.         fprintf( stderr, "Could not allocate: %s\n", msg );
  119.         exit(1);
  120.       }
  121.       return memptr;
  122. }
  123.  
  124.  
  125. void InitdynMem(void)
  126. {
  127.  
  128. TERMAREA = ini_calloc( TERMNODE, MAX_TERMS, "Term heap" );
  129.  
  130. /* ATOMENTRY ATOMTAB[MAX_ATOMS]; */
  131. a_ARITY = ini_calloc( ARITY_TYPE, MAX_ATOMS, "Atom table" );         
  132. a_IDENT = ini_calloc(STRING, MAX_ATOMS, "Atom table" );
  133. a_NEXTATOM = ini_calloc(ATOM,MAX_ATOMS, "Atom table" );
  134. a_CHAINATOM = ini_calloc(ATOM,MAX_ATOMS, "Atom table" );
  135. a_CLAUSE = ini_calloc(CLAUSE,MAX_ATOMS, "Atom table" );
  136. a_PREC = ini_calloc(PREC_TYPE,MAX_ATOMS, "Atom table");
  137. a_INFO = ini_calloc(INFO_TYPE,MAX_ATOMS, "Atom table" );
  138. #if HACKY
  139. a_NROFCALLS = ini_calloc(card,MAX_ATOMS, "Atom table" );
  140. #endif
  141.  
  142. /* volatile */ 
  143.  
  144. TRAILTAB = ini_calloc(TERM, MAX_TRAILER, "Var Trail Stack" );
  145.  
  146. /* ENVENTRY ENVTAB[MAX_ENVS]; */
  147. e_FCALL = ini_calloc(TERM,MAX_ENVS, "Active Goal Stack");
  148. e_FBASE = ini_calloc(TERM,MAX_ENVS, "Active Goal Stack" );
  149. e_FENV = ini_calloc(ENV,MAX_ENVS, "Active Goal Stack");
  150. e_FCHOICE = ini_calloc(ENV,MAX_ENVS, "Active Goal Stack");
  151. e_FATOM = ini_calloc(ATOM,MAX_ENVS, "Active Goal Stack");
  152. e_FCLAUSE = ini_calloc(CLAUSE,MAX_ENVS, "Active Goal Stack");
  153. e_FTRAIL = ini_calloc(TRAIL,MAX_ENVS, "Active Goal Stack");
  154.  
  155. STRINGTAB = ini_calloc( char, MAX_STRINGS, "String table" );
  156.  
  157. TRAILEND = &TRAILTAB[1];
  158. BASETRAIL = &TRAILTAB[1];
  159. ENDTRAILER = &TRAILTAB[MAXTRAILER];
  160. BASETERM= &TERMAREA[0];
  161. GLOTOP= &TERMAREA[1];       
  162. HEAPTOP= &TERMAREA[MAXTERMS];
  163. LASTTERM= &TERMAREA[MAXTERMS];
  164. tempterm=nil_term;
  165. clausechain=nil_term;   /* used for retract */
  166. ATOMSTOP=MAXATOMS;
  167. STRINGSTOP=MAXSTRINGS;
  168.  
  169. }
  170.  
  171. #else
  172.  
  173. TERMNODE TERMAREA[MAX_TERMS];
  174.  
  175. /* ATOMENTRY ATOMTAB[MAX_ATOMS]; */
  176. declare(ARITY_TYPE,a_ARITY,MAX_ATOMS);
  177. fardeclare(STRING,a_IDENT,MAX_ATOMS);
  178. fardeclare(ATOM,a_NEXTATOM,MAX_ATOMS);
  179. fardeclare(ATOM,a_CHAINATOM,MAX_ATOMS);
  180. declare(CLAUSE,a_CLAUSE,MAX_ATOMS);
  181. fardeclare(PREC_TYPE,a_PREC,MAX_ATOMS);
  182. fardeclare(INFO_TYPE,a_INFO,MAX_ATOMS);
  183. #if HACKY
  184. fardeclare(card,a_NROFCALLS,MAX_ATOMS);
  185. #endif
  186.  
  187. /* volatile */ TERM TRAILTAB[MAX_TRAILER];
  188.  
  189. /* ENVENTRY ENVTAB[MAX_ENVS]; */
  190. declare(TERM,e_FCALL,MAX_ENVS);
  191. declare(TERM,e_FBASE,MAX_ENVS);
  192. declare(ENV,e_FENV,MAX_ENVS);
  193. declare(ENV,e_FCHOICE,MAX_ENVS);
  194. fardeclare(ATOM,e_FATOM,MAX_ENVS);
  195. fardeclare(CLAUSE,e_FCLAUSE,MAX_ENVS);
  196. fardeclare(TRAIL,e_FTRAIL,MAX_ENVS);
  197.  
  198. char STRINGTAB[MAX_STRINGS];
  199.  
  200. #endif
  201.  
  202. #endif
  203.  
  204.  
  205.  
  206.